/*
 * Cliente.h
 *
 *  Created on: 01/07/2014
 *      Author: flb
 */

#ifndef CLIENTE_H_
#define CLIENTE_H_

#include "IncludesServidor.h"
#include "Partida.h"
#include "ProductorAcciones.h"
#include "ProductorAccionesAEjecutar.h"
#include "ConsumidorAccionesAEjecutar.h"
#include "EscuchaTeclasIngresadas.h"
#include "RefreshDisplay.h"

//using namespace std;

class Cliente {
private:
	/* metodos Administracion */
	bool configuracionesGenerales();
	/* metodos Imagen / Display / SDL */
	bool iniciarDisplay();
	void ignorarEventosSDL();
	bool cargarSpriteFelix(const char * spriteArch, SDL_Surface ** imagen);
	/* metodos Torneo */
	bool conectarServidorTorneo();
	bool inicializarPartida();
	/* metodos Partida */
	void iniciarPartida();
	bool finalizarPartida();
public:
	/* Variables globales al programa */
	bool fin_logico;					// Indica el fin logico del programa.
	std::string host;							// Dirección del Servidor
	int puerto;									// Puerto del Servidor
	map<int, int> controles;		// Definición de los controles / Comandos
	t_jugador torneo;// Informacion de Jugador en el Torneo (Puerto, SocketId, Puntaje, Ranking, Estado)

	Partida *juego;	// Partida en si misma, con los objetos acciones y demas.
	Socket* conexion;			// Objeto Socket de conexion con Servidor
	ProductorAccionesAEjecutar *pAccToExec;
	ConsumidorAccionesAEjecutar *cAccToExec;
	EscuchaTeclasIngresadas *inputTeclas;
	ProductorAcciones *pAcciones;// Hilo que recibe las acciones del Servidor de Partida.
	RefreshDisplay *pantalla;

	//Imagen para fondo+vidrios+bloqueos
	SDL_Surface *pantallaBase;
	//Imagen sprites Felix1
	SDL_Surface *imagen1;
	//Imagen sprites Felix1
	SDL_Surface *imagen2;

	Cliente();
	virtual ~Cliente();
	bool configuracionesJugador();
	void ejecutar();
	/* metodos Administracion */
	//void signalHandler(int signal);
	void liberarRecursosPartida();
	void liberarRecursos();
};

#endif /* CLIENTE_H_ */
